package com.itheima.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;

/**
 * @Description:  1. 公共填充作用，就是在修改，增加的时候会有必须要添加的字段，
 *  每次添加会使得代码冗余，所以用公共填充来实现
 *                2. ThreadLocal 就是在同一个线程中数据共享，在客户端的每个请求都有一条
 *  线程来解决， 所以在同一个线程中，ThreadLocal中存的数据可以在dao和service和controller
 *  获取。
 *              2.1 储存方法，set(Object), 获取方法， get()
 * @Create by: JJ菜菜
 * @Date: 2021/11/1 11:21
 */


@Component
public class MeatObject implements MetaObjectHandler {
    @Autowired
    private HttpSession session;




    // 添加时执行
    @Override
    public void insertFill(MetaObject metaObject) {
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        // 该处的id在session中获取。
//        metaObject.setValue("createUser", session.getAttribute("employee"));
//        metaObject.setValue("updateUser", session.getAttribute("employee"));
        // 也可以使用ThreadLocal。

        metaObject.setValue("createUser", GetThreadLocal.getThreadLocal());
        metaObject.setValue("updateUser", GetThreadLocal.getThreadLocal());
    }
    // 在修改时调用
    @Override
    public void updateFill(MetaObject metaObject) {
        metaObject.setValue("updateTime", LocalDateTime.now());
//        metaObject.setValue("updateUser", session.getAttribute("employee"));
        // 也可以从ThreadLocal中获取

        metaObject.setValue("updateUser", GetThreadLocal.getThreadLocal());
    }
}
